import * as vscode from 'vscode';
import {dedent} from "../../../utils";

// documentation中使用了代码块，代码块中写的事makedown格式，首行不能为空
let tableViewItems = [
    {
        "label": "TableView_Create",
        "insertText": dedent`
        local tableView = GUI:TableView_Create(\${1:parent}, \${2:"TABLEVIEW"}, \${3:200}, \${4:100}, \${5:600}, \${6:400}, \${7:1}, \${8:600}, \${9:40}, \${10:200})
        `,
        "documentation": dedent`# 创建列表容器[优化加载]
        ## TableView_Create(parent, ID, x, y, width, height, direction, cellWid, cellHei, num)

        | 参数      | 必选 | 类型   | 注释             |
        | :-------- | :--- | :----- | :--------------- |
        | parent    | 是   | obj    | 父节点对象       |
        | ID        | 是   | string | 唯一ID           |
        | x         | 是   | int    | 位置 横坐标      |
        | y         | 是   | int    | 位置 纵坐标      |
        | width     | 是   | int    | 容器宽度         |
        | height    | 是   | int    | 容器高度         |
        | direction | 是   | int    | 1：垂直; 2：水平 |
        | cellWid   | 是   | int    | 单个cell 宽      |
        | cellHei   | 是   | int    | 单个cell 高      |
        | num       | 是   | int    | 需创建cell个数   |
        `
    },
    {
        "label": "TableView_setCellCreateEvent",
        "insertText": dedent`
        GUI:TableView_setCellCreateEvent(\${1:tableView}, \${2:function(parent, idx)
            local panel = GUI:Layout_Create(parent, string.format("layout_%s", idx), 0, 0, 600, 40)
            local text = GUI:Text_Create(panel, "TEXT", 0, 20, 18, "#00FF00", "IDX----------------"..idx)
            GUI:setAnchorPoint(text, 0, 0.5)
        end})
        `,
        "documentation": dedent`# 设置子cell创建方法
        ## TableView_setCellCreateEvent(widget, func)

        | 参数   | 必选 | 类型     | 注释                                    |
        | :----- | :--- | :------- | :-------------------------------------- |
        | widget | 是   | obj      | tableView对象                           |
        | func   | 是   | function | 创建函数 传入参数(cell父节点, cell下标) |
        `
    },
    {
        "label": "TableView_setDirection",
        "insertText": dedent`
        GUI:TableView_setDirection(\${1:tableView}, \${2:1})
        `,
        "documentation": dedent`# 设置滚动方向
        ## TableView_setDirection(widget, value)

        | 参数   | 必选 | 类型 | 注释                      |
        | :----- | :--- | :--- | :------------------------ |
        | widget | 是   | obj  | tableView对象             |
        | value  | 是   | int  | 滚动方向 1：垂直; 2：水平 |
        `
    },
    {
        "label": "TableView_setBackGroundColor",
        "insertText": dedent`
        GUI:TableView_setBackGroundColor(\${1:tableView}, \${2:"#FFFFFF"})
        `,
        "documentation": dedent`# 设置背景颜色
        ## TableView_setBackGroundColor(widget, value)

        | 参数   | 必选 | 类型   | 注释                         |
        | :----- | :--- | :----- | :--------------------------- |
        | widget | 是   | obj    | tableView对象                |
        | value  | 是   | string | 十六进制颜色值 例: “#FFFFFF” |
        `
    },
    {
        "label": "TableView_setContentOffset",
        "insertText": dedent`
        GUI:TableView_setContentOffset(\${1:tableView}, \${2:x}, \${3:y})
        `,
        "documentation": dedent`# 设置内部区域偏移位置 [3.40.3版本]
        ## TableView_setContentOffset(widget, x, y)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | tableView对象 |
        | x      | 是   | int  | 偏移坐标X     |
        | y      | 是   | int  | 偏移坐标Y     |
        `
    },
    {
        "label": "TableView_getContentOffset",
        "insertText": dedent`
        local offset = GUI:TableView_getContentOffset(\${1:tableView})
        `,
        "documentation": dedent`# 获取内部区域偏移位置 [3.40.3版本]
        ## TableView_getContentOffset(widget)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | tableView对象 |
        `
    },
    {
        "label": "TableView_addOnTouchedCellEvent",
        "insertText": dedent`
        GUI:TableView_addOnTouchedCellEvent(\${1:tableView}, \${2:func})
        `,
        "documentation": dedent`# 添加点击cell事件
        ## TableView_addOnTouchedCellEvent(widget, func)

        | 参数   | 必选 | 类型     | 注释             |
        | :----- | :--- | :------- | :--------------- |
        | widget | 是   | obj      | tableView对象    |
        | func   | 是   | function | 点击cell触发回调 |
        `
    },
    {
        "label": "TableView_scrollToCell",
        "insertText": dedent`
        GUI:TableView_scrollToCell(\${1:tableView}, \${2:index})
        `,
        "documentation": dedent`# 滚动到某cell位置
        ## TableView_scrollToCell(widget, index)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | tableView对象 |
        | index  | 是   | int  | 对应cell下标  |
        `
    },
    {
        "label": "TableView_addOnScrollEvent",
        "insertText": dedent`
        GUI:TableView_addOnScrollEvent(\${1:tableView}, \${2:func})
        `,
        "documentation": dedent`# 添加容器滚动回调 [3.40.3版本]
        ## GUI:TableView_addOnScrollEvent(widget, func)

        | 参数   | 必选 | 类型     | 注释                                   |
        | :----- | :--- | :------- | :------------------------------------- |
        | widget | 是   | obj      | tableView对象                          |
        | func   | 是   | function | 容器滚动回调函数 param1: TableView控件 |
        `
    },
    {
        "label": "TableView_setTableViewCellsNumHandler",
        "insertText": dedent`
        GUI:TableView_setTableViewCellsNumHandler(\${1:tableView}, \${2:func})
        `,
        "documentation": dedent`# 设置容器cell个数 [3.40.5版本]
        ## GUI:TableView_setTableViewCellsNumHandler(widget, func)

        | 参数   | 必选 | 类型         | 注释                                       |
        | :----- | :--- | :----------- | :----------------------------------------- |
        | widget | 是   | obj          | tableView对象                              |
        | func   | 是   | int/function | cell总个数(int)/返回cell总个数的函数(func) |
        `
    },
    {
        "label": "TableView_reloadData",
        "insertText": dedent`
        GUI:TableView_reloadData(\${1:tableView})
        `,
        "documentation": dedent`# 加载容器所有列表数据 [3.40.5版本]
        ## GUI:TableView_reloadData(widget)

        | 参数   | 必选 | 类型 | 注释          |
        | :----- | :--- | :--- | :------------ |
        | widget | 是   | obj  | tableView对象 |

        - 结合GUI:TableView_setTableViewCellsNumHandler方法 改变数据使用
        `
    },
    {
        "label": "TableView_addMouseScrollEvent",
        "insertText": dedent`
        GUI:TableView_addMouseScrollEvent(\${1:tableView}, \${2:func})
        `,
        "documentation": dedent`# 添加容器鼠标滚动事件 [3.40.5版本]
        ## GUI:TableView_addMouseScrollEvent(widget, func)

        | 参数   | 必选 | 类型     | 注释                                                         |
        | :----- | :--- | :------- | :----------------------------------------------------------- |
        | widget | 是   | obj      | tableView对象                                                |
        | func   | 否   | function | 鼠标滚动回调函数传参{widget = widget, x = 滚动坐标X, y = 滚动坐标Y} [不填采用官方默认添加滚动] |
        `
    },
    {
        "label": "TableViewCell_getIdx",
        "insertText": dedent`
        local idx = GUI:TableViewCell_getIdx(\${1:cell})
        `,
        "documentation": dedent`# 获取容器cell的下标/序列号
        ## GUI:TableViewCell_getIdx(cell)

        | 参数   | 必选 | 类型 | 注释              |
        | :----- | :--- | :--- | :---------------- |
        | widget | 是   | obj  | tableViewCell对象 |
        `
    }
]



export function getCompletionItems(): vscode.CompletionItem[] {


    const completionItems: vscode.CompletionItem[] = [];
    tableViewItems.forEach((item: any) => {
        completionItems.push(createFunctionCompletionItem(item.label, item.insertText, item.documentation));
    });
    return completionItems;
}

function createFunctionCompletionItem(label: string, insertText: string, documentation?: string): vscode.CompletionItem {
    const item = new vscode.CompletionItem(label, vscode.CompletionItemKind.Function);
    item.insertText = new vscode.SnippetString(insertText);
    if (documentation) {
        item.documentation = new vscode.MarkdownString(documentation);
    }
    return item;
}
